function walk (arr) {
  let hash = new Map()
  for (let i = 0; i < arr.length; i++) {
    if (!hash[arr[i]]) {
      hash[arr[i]] = []
    }
    hash[arr[i]].push(i)
  } // 放入hash表中
  console.log(hash);
  let m = arr.length
  let dp = new Array(m).fill(Infinity) // dp[i] 表示走到i的最小步数
  dp[0] = 0 // 第一个不用走
  for (let i = 1; i < m; i++) {
    let minStep = Infinity
    let stepArr = hash[arr[i]] // 找到和他相同的下标数字
    for (let j = 0; j < stepArr.length; j++) {
      if (stepArr[j] !== i) { // 不是这一个下标开始跳一步
        minStep = Math.min(dp[stepArr[j]] + 1, minStep)
      }
    }
    if (i !== m - 1) {
      dp[i] = Math.min(dp[i], dp[i - 1] + 1, minStep) // 如果
    } else {
      dp[i] = Math.min(dp[i], dp[i - 1] + 1, minStep)
    }
    dp[i - 1] = Math.min(dp[i] + 1, dp[i - 1])
  }
  console.table(dp)
  return dp[m - 1]
}
let arr = [100, 40, 24, 1, 40, 100, 24, 100, 40, 5, 100, 40, 1, 5]
// let arr = [5, 5, 5, 5, 5, 5]
// let arr = [1, 2, 3, 4, 5, 1, 6, 7, 8, 1, 10, 20, 21, 8, 9]
console.log(walk(arr));